Crate decompress

source ·
Expand description

Decompress an archive, supporting multiple format and stripping path prefixes

Usage

You can use the default decompress stack:

#![allow(clippy::cognitive_complexity)]
use clap::{arg, command};
use decompress::ExtractOpts;

fn main() {
    let matches = command!()
        .arg(arg!(<archive> "Archive to extract"))
        .arg(arg!(<out> "Output folder"))
        .arg(arg!(
            -s --strip "Strip the first component of the archive"
        ))
        .get_matches();

    let archive = matches.get_one::<String>("archive").expect("required");
    let to = matches.get_one::<String>("out").expect("required");
    let strip = if matches.get_flag("strip") { 1 } else { 0 };
    let res = decompress::decompress(archive, to, &ExtractOpts { strip });
    println!("{:?}", res);
}

Or build your own stack:

#![allow(clippy::cognitive_complexity)]
use clap::{arg, command};
use decompress::{decompressors, ExtractOpts};
use regex::Regex;

fn main() {
    let matches = command!()
        .arg(arg!(<archive> "Archive to Unzip (attempt any file)"))
        .arg(arg!(<out> "Output folder"))
        .arg(arg!(
            -s --strip "Strip the first component of the archive"
        ))
        .get_matches();

    let archive = matches.get_one::<String>("archive").expect("required");
    let to = matches.get_one::<String>("out").expect("required");
    let strip = if matches.get_flag("strip") { 1 } else { 0 };
    let decompressor = decompress::Decompress::build(vec![decompressors::zip::Zip::build(Some(
        Regex::new(r".*").unwrap(),
    ))]);
    let res = decompressor.decompress(archive, to, &ExtractOpts { strip });
    println!("{:?}", res);
}

NOTE: to include or exclude decompressors types, use --features and disable default. This in turn removes or includes the (costly) dependencies these features need.

Modules

Structs

Enums

Traits

Functions

Decompress an archive with default decompressor set up